<?php

/**
 * Fonctions sur les chaînes de caractères
 *
 * @package cass
 * @author Mickaël CASTANHEIRO <mickael.castanheiro@gmail.com>
 * @version 1.0
 */

/**
 * Échappe une chaîne de caractères
 * @param <type> $_string
 */
function slugify($_string) {
    // replace non letter or digits by -
    $_string = preg_replace('~[^\\pL\d]+~u', '-', $_string);

    // trim
    $_string = trim($_string, '-');

    // transliterate
    if (function_exists('iconv')) {
        $_string = iconv('utf-8', 'us-ascii//TRANSLIT', $_string);
    }

    // lowercase
    $_string = strtolower($_string);

    // remove unwanted characters
    $_string = preg_replace('~[^-\w]+~', '', $_string);

    if (empty($_string)) {
        return 'n-a';
    }

    return $_string;
}

/**
 * Transforme la fin d'un article en apostrophe si besoin
 * @param String $_term
 * @param String $_word
 * @return String
 */
function apostrophe($_term, $_word) { 
    return ( in_array(slugify($_word{0}), array('a','e','i','o','u','y')) ) ?
            substr($_term, 0, -1) . '\'' . $_word :
            $_term . ' ' . $_word;
}

/**
 * Crypte un mot de passe avec un sel si indiqué
 * @param String $_password
 * @param String $_salt
 * @return String
 */
function encrypt($_password, $_salt=null) {
    return sha1($_salt . $_password);
}

/**
 * Donne une chaîne de caractères aléatoire
 * @param <type> $_length
 * @param <type> $_strSeparators
 * @param <type> $_strSpecials
 * @return string
 */
function randomString($_length = 8, $_strSeparators = true, $_strSpecials = false) {
    $str = 'abcdefghijklmnopqrstuvwxyz0123456789';
    if ( $_length == 0 ) return '';

    $string = $str{rand(0, strlen($str))};
    $_length--;

    if ( $_strSeparators ) $str .= '_-';
    if ( $_strSpecials ) $str .= '.#!?;+*';

    $strLength = strlen($str)-1;    
    for ($i=0; $i<$_length; $i++) {
        $string .= $str{rand(0, $strLength)};
    }

    return $string;
}

/**
 * Formate une chaine de type un-mot-et-un-autre en unMotEtUnAutre
 */
function formatSeparatorToUpper($_string, $_separator, $_firstToUpper = false) {
    $string = implode('', array_map('ucfirst', explode($_separator, $_string))); // avec majuscule en premier
    if ( !$_firstToUpper ) {
        $string = lcfirst($string);
    }
    return $string;
}

function resume($_string, $_nb) {
    $_string = strip_tags($_string); // enlève les balises
    
    if ( strlen($_string) <= $_nb ) {
        return $_string;
    }

    $words = preg_split("/[\s,]+/", $_string, $_nb);
    
    $string = null;
    $nbWords = 0;
    $i=0;
    while ( ($nbWords < $_nb) AND ($i < sizeof($words)) ) {
        $string .= $words[$i] . ' ';
        $i++;
        $nbWords += strlen($words[$i]) + 1;
    }

    return substr($string, 0, -1) . '...';
}